﻿using Microsoft.AspNetCore.Mvc.Filters;

namespace Medical.ReadApi.MyFilter
{
    /// <summary>
    /// 全局异常过滤器 - 用于捕获和处理应用程序中的未处理异常1
    /// </summary>
    public class GlobalExceptionFilter : IExceptionFilter
    {
        private readonly ILogger<GlobalExceptionFilter> _logger;

        /// <summary>
        /// 构造函数 - 依赖注入日志服务1
        /// </summary>
        /// <param name="logger">日志记录器实例</param>
        public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger)
        {
            _logger = logger;
        }

        /// <summary>
        /// 异常处理方法 - 当Action执行过程中发生异常时调用
        /// </summary>
        /// <param name="context">异常上下文，包含异常信息和相关上下文数据</param>
        public void OnException(ExceptionContext context)
        {
            // 记录异常详细信息到日志系统
            // 使用结构化日志记录，包含异常类型、堆栈跟踪和消息
            _logger.LogError(
                context.Exception,
                "【全局异常过滤器】异常类型：{ExceptionType}，异常消息：{ExceptionMessage}",
                context.Exception.GetType().Name,
                context.Exception.Message
            );

            // 可选：在这里可以添加更多的异常处理逻辑，例如：
            // 1. 根据异常类型返回不同的HTTP状态码
            // 2. 自定义错误响应格式
            // 3. 发送异常通知（邮件、短信等）
            // 4. 标记异常为已处理，阻止异常继续传播

            // 示例：返回统一的错误响应
            // context.Result = new JsonResult(new { 
            //     Success = false, 
            //     Message = "系统发生错误，请稍后重试" 
            // }) {
            //     StatusCode = 500
            // };
            // context.ExceptionHandled = true; // 标记异常已处理
        }
    }
}
